From 609ddee632b336232b5a9768a98459e48d15d242 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 1 Feb 2011 05:31:41 +0100 Subject: [PATCH] x11: Register wm_protocols function with gdk_window_add_filter() The client message code is about to go away, so we need to use a different way to get at ClientMessage output. --- gdk/x11/gdkdisplay-x11.c | 26 ++++++++++++++------------ gdk/x11/gdkdisplay-x11.h | 4 ++++ gdk/x11/gdkmain-x11.c | 4 ++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c index 23dd5677f1..e7742bd21b 100644 --- a/gdk/x11/gdkdisplay-x11.c +++ b/gdk/x11/gdkdisplay-x11.c @@ -1016,21 +1016,28 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator, return return_val; } -static GdkFilterReturn -gdk_wm_protocols_filter (GdkXEvent *xev, - GdkEvent *event, - gpointer data) +GdkFilterReturn +_gdk_wm_protocols_filter (GdkXEvent *xev, + GdkEvent *event, + gpointer data) { XEvent *xevent = (XEvent *)xev; GdkWindow *win = event->any.window; GdkDisplay *display; Atom atom; - if (!win) - return GDK_FILTER_REMOVE; + if (!GDK_IS_X11_WINDOW (win)) + return GDK_FILTER_CONTINUE; + + if (xevent->type != ClientMessage) + return GDK_FILTER_CONTINUE; display = GDK_WINDOW_DISPLAY (win); - atom = (Atom)xevent->xclient.data.l[0]; + + if (xevent->xclient.message_type != gdk_x11_get_xatom_by_name_for_display (display, "WM_PROTOCOLS")) + return GDK_FILTER_CONTINUE; + + atom = (Atom) xevent->xclient.data.l[0]; if (atom == gdk_x11_get_xatom_by_name_for_display (display, "WM_DELETE_WINDOW")) { @@ -1113,11 +1120,6 @@ gdk_event_init (GdkDisplay *display) device_manager = gdk_display_get_device_manager (display); gdk_x11_event_source_add_translator ((GdkEventSource *) display_x11->event_source, GDK_EVENT_TRANSLATOR (device_manager)); - - gdk_display_add_client_message_filter (display, - gdk_atom_intern_static_string ("WM_PROTOCOLS"), - gdk_wm_protocols_filter, - NULL); } static void diff --git a/gdk/x11/gdkdisplay-x11.h b/gdk/x11/gdkdisplay-x11.h index cd72cfae62..a18d647fb0 100644 --- a/gdk/x11/gdkdisplay-x11.h +++ b/gdk/x11/gdkdisplay-x11.h @@ -146,6 +146,10 @@ GdkScreen *_gdk_x11_display_screen_for_xrootwin (GdkDisplay *display, void _gdk_x11_display_error_event (GdkDisplay *display, XErrorEvent *error); +GdkFilterReturn _gdk_wm_protocols_filter (GdkXEvent *xev, + GdkEvent *event, + gpointer data); + G_END_DECLS #endif /* __GDK_X11_DISPLAY__ */ diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c index 9cf087898f..469e019d5f 100644 --- a/gdk/x11/gdkmain-x11.c +++ b/gdk/x11/gdkmain-x11.c @@ -116,6 +116,10 @@ _gdk_x11_windowing_init (void) { XSetErrorHandler (gdk_x_error); XSetIOErrorHandler (gdk_x_io_error); + + gdk_window_add_filter (NULL, + _gdk_wm_protocols_filter, + NULL); } GdkGrabStatus -- 2.30.2